package com.baiduspring.utils.number;

import java.util.Random;

/**
 * <div style="color:green;font-weight: bolder;">
 * 	<h3>数学计算</h3>
 * 	&emsp;&emsp;描述：
 * </div>
 * @author xiongyan
 * @date 2016年2月26日 下午3:17:43
 * @history
 * 	<add>
 * 		@functionName 
 *  	@author 
 *  	@date 2016年2月26日 下午3:17:43
 *  	@remark 
 * 	</add>
 * 	<upd> 
 * 		@functionName 
 *  	@author 
 *  	@date 2016年2月26日 下午3:17:43
 *  	@remark 
 * 	</upd>
 */
public class MathUtils {
	/**
	 * <div style="color:green;font-weight: bolder;">
	 * 	<h3>计算操作</h3>
	 * 	&emsp;&emsp;描述：将一个double类型的数值进行四舍五入运算并保留指定的小数位数。<br>
	 *  &emsp;&emsp;&emsp;val  ：进行计算的数值
	 *  &emsp;&emsp;&emsp;digit：指定保留的小数位数
	 * </div>
	 * @author xiongyan
	 * @date 2016年2月26日下午3:14:00
	 * @param 
	 * @throws
	 * @return
	 */
	public static Double roundOfDouble(Double val, Integer digit) {
		return Double.parseDouble(String.format("%." + digit + "f", val));
	}
	
	/**
	 * <div style="color:green;font-weight: bolder;">
	 * 	<h3></h3>
	 * 	&emsp;&emsp;描述：获取小于指定值的整数
	 * </div>
	 * @author xiongyan
	 * @date 2016年4月18日下午3:37:49
	 * @param 
	 * @throws
	 * @return
	 */
	public static Integer randomInt(Integer num) {
		Random random = new Random();
		return random.nextInt(num) % (num + 1);
	}
	
	/**
	 * <div style="color:green;font-weight: bolder;">
	 * 	<h3></h3>
	 * 	&emsp;&emsp;描述：二进制加法
	 * </div>
	 * @author xiongyan
	 * @date 2016年5月31日下午5:45:27
	 * @param 
	 * @throws
	 * @return
	 */
	public static String binaryAdd(String a, String b) {
        return toBinaryString(toInteger(a) + toInteger(b));
    }
	
	/**
	 * <div style="color:green;font-weight: bolder;">
	 * 	<h3></h3>
	 * 	&emsp;&emsp;描述：二进制减法
	 * </div>
	 * @author xiongyan
	 * @date 2016年5月31日下午5:49:02
	 * @param minuend > 被减数
	 * @param meiosis > 减数
	 * @throws
	 * @return
	 */
	public static String binarySub(String minuend, String meiosis) {
		return toBinaryString(toInteger(minuend) - toInteger(meiosis));
	}

	/**
	 * <div style="color:green;font-weight: bolder;">
	 * 	<h3></h3>
	 * 	&emsp;&emsp;描述：二进制转十进制
	 * </div>
	 * @author xiongyan
	 * @date 2016年5月31日下午5:46:11
	 * @param 
	 * @throws
	 * @return
	 */
    public static int toInteger(String binary) {
        char[] c = binary.toCharArray();
        int sum = 0;
        for (int i = 0; i < c.length; i++) {
            sum += Integer.parseInt(new String(c, i, 1))
                    * Math.pow(2, c.length - i);
        }
        return sum;
    }

    /**
     * <div style="color:green;font-weight: bolder;">
     * 	<h3></h3>
     * 	&emsp;&emsp;描述：十进制转二进制
     * </div>
     * @author xiongyan
     * @date 2016年5月31日下午5:46:38
     * @param 
     * @throws
     * @return
     */
    public static String toBinaryString(int i) {
        return Integer.toBinaryString(i);
    }
    
    /**
     * 生成制定范围的随机整数
     * @author xiongyan
     * @date 2017年1月5日下午18:31:26
     * @param min
     * @param max
     * @return
     */
    public static Integer randomIntBetween(int min, int max) {
        Random random = new Random();
        int randomInt = random.nextInt(max)%(max-min+1) + min;
        return randomInt;
	}
    
}
